// 定义用户相关的仓库
import {defineStore} from 'pinia'; 
import {reqGetUserCode,reqUserLogin} from '@/api/hospital/index'
import type { LoginData,UserLoginResponseData } from '@/api/hospital/type';
import type {UserState} from './interface/index'
import { SET_TOKEN,GET_TOKEN,REMOVE_TOKEN } from '@/utils/user';
const useUserStore = defineStore('User',{
    state:():UserState=>{
        return {
            // 用于控制登录组件的dialog显示与隐藏
            visiable:false,
            // 存储验证码
            code:'',
            // 将本地的用户信息拿来由json字符串转化为对象
            // 后面加个||意思是本地存储没有，就取后面空对象，防止报错
            userInfo:JSON.parse(GET_TOKEN()as string)||{}
        }
    },
    actions:{
        // 获取验证码的方法
        async getCode(phone:string){
            let result:any=await reqGetUserCode(phone)
            if(result.data.code==200){
                this.code=result.data.data;
                return 'OK'
            }else{
                return Promise.reject(new Error(result.message))
            }
        },
        // 用户手机号码登录方法
        async userLogin(loginData:LoginData){
            let result:UserLoginResponseData=await reqUserLogin(loginData)
            // console.log(result);
            if(result.data.code==200){
                this.userInfo=result.data.data
                // 本地存储持久化存储用户信息  JSON.stringify(this.userInfo)将对象转化为json字符串
                SET_TOKEN(JSON.stringify(this.userInfo));
                // 返回一个成功的promise
                return 'OK'
            }else{
                return Promise.reject(new Error(result.message))
            }
        },
        // 退出登录方法
        logout(){
            // 清空仓库的数据
            this.userInfo = {name:'',token:''}
            // 清空本地存储的数据
            REMOVE_TOKEN();
        },
        // 查询微信扫码的接口(看本地是否存储数据)
        queryState(){
            // 开启定时器每隔一段时间询问:本地存储是否拥有用户信息
            let timer = setInterval(()=>{
                // 本地存储已有数据
                if(GET_TOKEN()){
                    // 关闭对话框
                    this.visiable=false;
                    this.userInfo=JSON.parse(GET_TOKEN() as string);
                    clearInterval(timer);
                }
            },1000)
        }
    },
    getters:{

    }
})

export default useUserStore;